package com.itheima.interceptor;

import com.itheima.common.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Slf4j
@Component //将类放入容器中
public class LoginCheckInterceptor implements HandlerInterceptor {

    /**
     * @param request  请求对象（获取请求相关的任何信息）
     * @param response 响应对象（通过Response响应数据给前端）
     * @param handler
     * @return true表示放行  false表示拦截
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("拦截器：{}", handler);
        //判断用户是否登录（从请求中获取请求头）(如果没有携带头，获取的就是null)
        String token = request.getHeader("token");

        //校验token（该行代码只要报错，就可以认为用户没有登录）
        try {
            JwtUtils.parseJWT(token);
        } catch (Exception ex) {
            //响应401状态码给前端，前端会将页面跳转到登录界面
            response.setStatus(401); //401表示未登录
            //认定用户没有登录，必须拦截
            return false;
        }
        //返回true，表示放行
        return true;
    }
}
